package org.ssssssss.example.excel;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.http.server.DelegatingServerHttpResponse;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
public class 处理表格 {
    static int ExcelNUM3 = 0;//用于定位最后一个表的起始行号
    public static void main(String[] args) throws Exception {
        //String excelPath = "F:\\mail\\test.xlsx";

       String excelPath = "F:\\test.xlsx";//文件储存路径
        try {
            //String encoding = "GBK";
            File excel = new File(excelPath);
            if (excel.isFile() && excel.exists()) {   //判断文件是否存在

                String[] split = excel.getName().split("\\.");  //.是特殊字符，需要转义！！！！！

                Workbook wb;
                FileInputStream fis = new FileInputStream(excel);
                //根据文件后缀（xls/xlsx）进行判断
                if ("xls".equals(split[1])) {
                    //文件流对象
                    wb = new HSSFWorkbook(fis);
                } else if ("xlsx".equals(split[1])) {
                    wb = new XSSFWorkbook(fis);
                    //wb = new SXSSFWorkbook((XSSFWorkbook) wb);
                } else {
                    System.out.println("文件类型错误!");
                    return;
                }
                System.out.println("------------------统计数据-----------------------");
                //开始解析
                Sheet sheet = wb.getSheetAt(0);//读取sheet 0

                int firstRowIndex = sheet.getFirstRowNum() + 8;  //前八行没用，所以不读

                int lastRowIndex = sheet.getLastRowNum();//没用的值

                for (int rIndex = firstRowIndex; rIndex <= 12; rIndex++) {   //遍历行 格式不变的话这里直接用12
                    System.out.println("rIndex: " + rIndex);//关键字
                    Row row = sheet.getRow(rIndex);//创建行元素
                    if (row != null) {
                        int firstCellIndex = row.getFirstCellNum();//获取这一行的第一个数据标号
                        //int lastCellIndex = row.getLastCellNum();
                        for (int cIndex = firstCellIndex; cIndex < 4; cIndex++) {   //遍历列 格式不变的话这里用4最简便
                            Cell cell = row.getCell(cIndex);//获取单元格
                            if (cell != null) {
                                System.out.println(cell.toString());

                                //这里可以直接获取这一行的数据，直接用泛型接住就好

                            }
                        }
                    }
                }
                System.out.println("------------------统计数据-----------------------");
                int firstRowIndex1 = sheet.getFirstRowNum() + 16;
                int lastRowIndex1 = sheet.getLastRowNum();
                for (int rIndex = firstRowIndex1; rIndex <= lastRowIndex1; rIndex++) {//遍历行
                    System.out.println("rIndex: " + rIndex);//关键字
                    Row row = sheet.getRow(rIndex);//创建行元素
                    // 进行判读，是否要继续遍历下去
                    int judge = row.getFirstCellNum();
                    Cell cell1 =row.getCell(judge+1);
                    String text = cell1.toString();
                    if(text == "") {ExcelNUM3 =rIndex; break;}
                    if (row != null) {
                        int firstCellIndex = row.getFirstCellNum();
                        int lastCellIndex = row.getLastCellNum();
                        for (int cIndex = firstCellIndex + 1; cIndex < lastCellIndex; cIndex++) {   //遍历列
                            Cell cell = row.getCell(cIndex);
                            if (cell != null) {
                                System.out.println(cell.toString());
                                //这里可以直接获取这一行的数据，直接用泛型接住就好
                            }

                        }
                    }
                }
                System.out.println("------------------改进数据-----------------------");
                //  int firstRowIndex = sheet.getFirstRowNum() + 8;
                // int lastRowIndex2 = sheet.getLastRowNum();

                // ExcelNUM3说明： 这个数据是第二个无限表的末尾行号 ，如果excel文本格式固定，这里直接不需要修改
                // 如果格式不固定，这里需要把 +3 去掉，修改为别的能够定位下一个表的初始行号的值程序依然能够运行
                for ( int rIndex = ExcelNUM3 + 3 ; rIndex <= lastRowIndex; rIndex++) {   //遍历行
                    System.out.println("rIndex: " + rIndex);//关键字
                    Row row = sheet.getRow(rIndex);//创建行元素
                    //判断是否还要继续遍历下去
                    int judge = row.getFirstCellNum();
                    Cell cell1 =row.getCell(judge+1);
                    String text = cell1.toString();
                    if(text == "") {ExcelNUM3 =rIndex; break;}


                    if (row != null) {
                        int firstCellIndex = row.getFirstCellNum();
                        //int lastCellIndex = row.getLastCellNum();

                        for (int cIndex = firstCellIndex; cIndex < 4; cIndex++) {   //遍历列
                            Cell cell = row.getCell(cIndex);
                            if (cell != null) {
                                System.out.println(cell.toString());

                                //这里可以直接获取这一行的数据，直接用泛型接住就好
                            }
                        }
                    }
                }

            } else {
                System.out.println("找不到指定的文件");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
